<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>Sun Solaris 上的 Sun、iPlanet 和 Netscape 服务器</title>

 </head>
 <body><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="install.unix.lighttpd-14.html">Unix 平台的 Lighttpd 1.4</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="install.unix.commandline.html">CGI 和命令行设置</a></div>
 <div class="up"><a href="install.unix.html">Unix 系统下的安装</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div><hr /><div id="install.unix.sun" class="sect1">
 <h2 class="title">Sun Solaris 上的 Sun、iPlanet 和 Netscape 服务器</h2>
 <p class="para">
  本节包含了在 Sun Solaris 平台的 Sun Java System web Server、Sun ONE web Server、iPlanet
  和 Netscape 下安装 PHP 的说明和提示。
 </p>
 <p class="para">
  从 PHP 4.3.3 起，可以使用基于 
  <a href="ref.nsapi.html" class="link">NSAPI</a>模块 PHP 脚本来<a href="install.unix.sun.html#install.unix.sun.specialpages" class="link">生成自定义目录列表和错误页面</a>。更多与
  Apache 兼容的功能也可以使用。要了解如何在当前的 web
  服务器中支持此功能，请阅读<a href="install.unix.sun.html#install.unix.sun.notes" class="link">关于子请求（subrequests）的注释</a>。
 </p>
 <p class="para">
  可以在下面的链接中了解更多关于在 Netscape Enterprise Server（NES）中设置 PHP
  的信息：<a href="http://benoit.noss.free.fr/php/install-php4.html" class="link external">&raquo;&nbsp;http://benoit.noss.free.fr/php/install-php4.html</a>。
 </p>
 <p class="para">要在 Sun JSWS/Sun ONE WS/iPlanet/Netscape web 服务器中编译 PHP，请为 
  <a href="configure.about.html#configure.with-nsapi" class="link">--with-nsapi=[DIR]</a>
  输入合适的安装目录。默认的目录通常是 
  <var class="filename">/opt/netscape/suitespot/</var>。还可以阅读 
  <var class="filename">/php-xxx-version/sapi/nsapi/nsapi-readme.txt</var>。
 </p>
 <p class="para">
  <ol type="1">
   <li class="listitem">
    <p class="para">
     从 <a href="http://www.sunfreeware.com/" class="link external">&raquo;&nbsp;http://www.sunfreeware.com/</a> 或其它下载站点安装下面的软件包：
     <ul class="simplelist">
      <li class="member">
       <var class="filename">autoconf-2.13</var>
      </li>
      <li class="member">
       <var class="filename">automake-1.4</var>
      </li>
      <li class="member">
       <var class="filename">bison-1_25-sol26-sparc-local</var>
      </li>
      <li class="member">
       <var class="filename">flex-2_5_4a-sol26-sparc-local</var>
      </li>
      <li class="member">
       <var class="filename">gcc-2_95_2-sol26-sparc-local</var>
      </li>
      <li class="member">
       <var class="filename">gzip-1.2.4-sol26-sparc-local</var>
      </li>
      <li class="member">
       <var class="filename">m4-1_4-sol26-sparc-local</var>
      </li>
      <li class="member">
       <var class="filename">make-3_76_1-sol26-sparc-local</var>
      </li>
      <li class="member">
       <var class="filename">mysql-3.23.24-beta</var>（如果想要 mysql 支持）</li>
      <li class="member">
       <var class="filename">perl-5_005_03-sol26-sparc-local</var>
      </li>
      <li class="member">
       <var class="filename">tar-1.13</var>(GNU tar)
      </li>
     </ul>
    </p>
   </li>
   <li class="listitem">
    <span class="simpara">
     请确认 PATH 变量包含适当的目录 
     <em>PATH=.:/usr/local/bin:/usr/sbin:/usr/bin:/usr/ccs/bin</em>，并使用
     <strong class="userinput"><code>export PATH</code></strong>命令将其导出为环境变量。
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong class="userinput"><code>gunzip php-x.x.x.tar.gz</code></strong>（如果使用 .gz 版本，否则跳到 4）
   </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong class="userinput"><code>tar xvf php-x.x.x.tar</code></strong>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">进入 PHP 解压缩后的目录：
     <strong class="userinput"><code>cd ../php-x.x.x</code></strong>
    </span>
   </li>
   <li class="listitem">
    <p class="para">在下面的步骤中，请确认 Netscape 服务器安装在 
     <var class="filename">/opt/netscape/suitespot/</var>
     目录中。否则，将下面命令中的该路径修改为正确的路径并运行：
     <div class="example-contents">
<div class="shellcode"><pre class="shellcode">./configure --with-mysql=/usr/local/mysql \
--with-nsapi=/opt/netscape/suitespot/ \
--enable-libgcc</pre>
</div>
     </div>

    </p>
   </li>
   <li class="listitem">
    <span class="simpara">
     运行 <strong class="command">make</strong>，然后运行 
     <strong class="command">make install</strong>。
    </span>
   </li>
  </ol>
 </p>
 <p class="para">
  在执行了基础的安装并阅读相应的 Readme 文件后，还需要执行一些额外的配置步骤。
 </p>
 <p class="formalpara">
  <h5 class="title">Sun/iPlanet/Netscape 的配置说明</h5>
  <p class="para">
   首先需要为 
   <var class="varname"><var class="varname">LD_LIBRARY_PATH</var></var>
   环境变量添加一些路径，以便服务器找到所需的共享库。可以使用 web 
   服务器的启动脚本很好的完成这一工作。启动脚本通常位于：<var class="filename">/path/to/server/https-servername/start</var>。或许需要编辑其配置文件，它位于：<var class="filename">/path/to/server/https-servername/config/</var>。 
   <ol type="1">
    <li class="listitem">
     <p class="para">
	  添加下面一行到 
      <var class="filename">mime.types</var>（可以在管理服务器中添加）：
      <div class="example-contents screen">
<div class="cdata"><pre>
type=magnus-internal/x-httpd-php exts=php
</pre></div>
      </div>
	 </p>
    </li>
    <li class="listitem">
     <p class="para">
	  编辑 <var class="filename">magnus.conf</var>（若服务器 &gt;= 6）或 
      <var class="filename">obj.conf</var>（若服务器 &lt; 6）并添加下述内容。shlib 的值根据系统的配置会有所不同。它可能类似于 
      <var class="filename">/opt/netscape/suitespot/bin/libphp4.so</var>。应该在 
      <em>mime types init</em>后添加如下两行内容： 
      <div class="example-contents">
<div class="cdata"><pre>
Init fn=&quot;load-modules&quot; funcs=&quot;php4_init,php4_execute,php4_auth_trans&quot; shlib=&quot;/opt/netscape/suitespot/bin/libphp4.so&quot;
Init fn=&quot;php4_init&quot; LateInit=&quot;yes&quot; errorString=&quot;Failed to initialize PHP!&quot; [php_ini=&quot;/path/to/php.ini&quot;]
</pre></div>
      </div>

	  （PHP &gt;= 4.3.3）<em>php_ini</em>
	  参数是可选的。但是若使用它，便可以将 <var class="filename">php.ini</var> 放到 web 服务器的配置目录中去。
	 </p>
    </li>
    <li class="listitem">
     <p class="para">
	  在 <var class="filename">obj.conf</var> 中配置默认对象（对于虚拟服务器的类 [版本 6.0+] 是在 
      <var class="filename">vserver.obj.conf</var>中）： 
      <div class="example-contents">
<div class="cdata"><pre>
&lt;Object name=&quot;default&quot;&gt;
.
.
.
.#注意 下面一行添加在所有“ObjectType”之后，所有“AddLog”之前
Service fn=&quot;php4_execute&quot; type=&quot;magnus-internal/x-httpd-php&quot; [inikey=value inikey=value ...]
.
.
&lt;/Object&gt;
</pre></div>
      </div>

	  （PHP &gt;= 4.3.3）作为附加的参数，可以在 <var class="filename">php.ini</var> 
	  中添加一些特别的配置选项。例如可以设置 
      <em>docroot=&quot;/path/to/docroot&quot;</em> 指向 
      <em>php4_execute</em> 被调用的上下文（context）。对于布尔 ini 键值，请使用 0/1 作为其值，而不是 
      <em>&quot;On&quot;、&quot;Off&quot;</em> 等（它们是无效的），例如，使用 
      <em>zlib.output_compression=1</em>，而不应使用 
      <em>zlib.output_compression=&quot;On&quot;</em>。
     </p>
    </li>
    <li class="listitem">
     <p class="para">
	  本步骤仅在需要配置一个由 PHP 脚本组成的目录时由必要执行（类似于一个 
      <var class="filename">cgi-bin</var>目录）：
      <div class="example-contents">
<div class="cdata"><pre>
&lt;Object name=&quot;x-httpd-php&quot;&gt;
ObjectType fn=&quot;force-type&quot; type=&quot;magnus-internal/x-httpd-php&quot;
Service fn=php4_execute [inikey=value inikey=value ...]
&lt;/Object&gt;
</pre></div>
      </div>

	  之后，可以在管理服务器中配置一个目录，分配给它 
      <em>x-httpd-php</em> 风格（style）。这样在该目录中的所有文件都会被当作
      PHP 来执行。这样就能很方便的将 PHP 文件更名为 
      <var class="filename">.html</var>以隐藏 PHP。
	 </p>
    </li>
    <li class="listitem">
     <p class="para">
	  认证的设置：PHP 认证不能与其它任何类型的认证一起工作。所有认证被传递到
	  PHP 脚本。要为整个服务器配置 PHP 认证，在默认对象中添加下面一行：
      <div class="example-contents">
<div class="cdata"><pre>
&lt;Object name=&quot;default&quot;&gt;
AuthTrans fn=php4_auth_trans
.
.
.
&lt;/Object&gt;
</pre></div>
      </div>

	 </p>
    </li>
    <li class="listitem">
     <p class="para">
	  要在单一目录使用 PHP 认证，添加如下内容：
      <div class="example-contents">
<div class="cdata"><pre>
&lt;Object ppath=&quot;d:\path\to\authenticated\dir\*&quot;&gt;
AuthTrans fn=php4_auth_trans
&lt;/Object&gt;
</pre></div>
      </div>

	 </p>
    </li>
   </ol>
  </p>
 </p>
 <blockquote class="note"><p><strong class="note">Note</strong>: 
  <p class="para">
   PHP 使用的堆栈大小取决于 web 服务器的配置。如果运行很大的
   PHP 脚本时程序崩溃，推荐在 Admin Server（在“MAGNUS EDITOR”一节）中增大此项。
  </p>
 </p></blockquote>
 
 <div class="sect2" id="install.unix.sun.phpini">
  <h3 class="title">CGI 环境和对 php.ini 推荐的修改</h3>
  <p class="para">
   当编写 PHP 脚本时，应特别注意 Sun JSWS/Sun ONE WS/iPlanet/Netscape
   是一个多线程 web 服务器。因此，所有请求都运行在相同的进程空间（Web 
   服务器自己的空间），该空间仅有一套环境变量。如果想获得 CGI
   变量，例如 <em>PATH_INFO</em>、<em>HTTP_HOST</em>
   等，使用原有的 PHP 3.x
   的方式（<span class="function"><a href="function.getenv.html" class="function">getenv()</a></span>），或使用类似的方式（注册全局变量到环境变量，<em>$_ENV</em>），都是不可行的。只能获得运行中的 
   web 服务器的环境变量，而不能获得任何有效的 CGI 变量！
  </p>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    为什么在环境中存在（无效的）CGI 变量？
   </p>
   <p class="para">
    答：这是因为从管理服务器中启动 web 服务器进程时，运行了 web
	服务器的启动脚本，它事实上是一个 CGI 脚本（管理服务器中的一个 CGI
	脚本！）。这便是为什么启动的 web 服务器包含一些 CGI 变量。可以尝试不从管理服务器启动
	web 服务器，用 root 用户登录使用命令行手动启动它，会发现这些 CGI 形式的变量不复存在。
   </p>
  </p></blockquote>
  <p class="para">
   要在 PHP 4.x 中正确获得 CGI 变量，仅需修改脚本使用超级全局变量 
   <em>$_SERVER</em>。如果老脚本中使用了 
   <em>$HTTP_HOST</em> 等变量，应该在 <var class="filename">php.ini</var> 中打开 
   <em>register_globals</em>，并且要修改变量顺序（注意：从中删除 
   <em>&quot;E&quot;</em>，因为不需要这里的环境变量）： 
   <div class="example-contents">
<div class="cdata"><pre>
variables_order = &quot;GPCS&quot;
register_globals = On
</pre></div>
   </div>

  </p>
 </div>

 <div class="sect2" id="install.unix.sun.specialpages">
  <h3 class="title">错误页面及自造目录列表的特别使用 (PHP &gt;= 4.3.3)</h3>
  <p class="para">
   可以使用 PHP 为 
   <em>&quot;404 Not Found&quot;</em> 或类似的错误代码生成错误页面。将下面几行添加到 
   <var class="filename">obj.conf</var> 中以覆盖默认的错误页面： 
   <div class="example-contents">
<div class="cdata"><pre>
Error fn=&quot;php4_execute&quot; code=XXX script=&quot;/path/to/script.php&quot; [inikey=value inikey=value...]
</pre></div>
   </div>

   <em>XXX</em> 是 HTTP 错误代码。请删除任何可能干扰 
   <em>Error</em> 设置的指令。如果想为所有可能存在的错误提供一个页面，则将 
   <em>code</em> 参数删除。脚本可以通过 
   <em>$_SERVER[&#039;ERROR_TYPE&#039;]</em> 获得 HTTP 状态代码。
  </p>
  <p class="para">
   另一种可能是生成自造目录列表。只要创建一个 PHP 脚本，来显示目录列表 并在 
   <var class="filename">obj.conf</var> 中为 
   <em>type=&quot;magnus-internal/directory&quot;</em> 将相应的默认 
   <em>Service</em> 行替换为： 
   <div class="example-contents">
<div class="cdata"><pre>
Service fn=&quot;php4_execute&quot; type=&quot;magnus-internal/directory&quot; script=&quot;/path/to/script.php&quot; [inikey=value inikey=value...]
</pre></div>
   </div>

   错误和目录列表页面中，原始的 URI 和翻译的 URI 均被分别储存在 
   <em>$_SERVER[&#039;PATH_INFO&#039;]</em> 和 
   <em>$_SERVER[&#039;PATH_TRANSLATED&#039;]</em> 变量中。
  </p>
 </div>

 <div class="sect2" id="install.unix.sun.notes">
  <h3 class="title">关于 <span class="function"><a href="function.nsapi-virtual.html" class="function">nsapi_virtual()</a></span>和子请求的注意事项（PHP &gt;= 4.3.3）</h3>
  <p class="para">
   NSAPI 模块现在支持 
   <span class="function"><a href="function.nsapi-virtual.html" class="function">nsapi_virtual()</a></span> 函数（别名：
   <span class="function"><a href="function.virtual.html" class="function">virtual()</a></span>），用来在 web 服务器上创建子请求（subrequests）和在
   web 页面插入请求的结果。此函数使用了一些 NSAPI 中还没有文档说明的函数。在 Unix
   下，该模块自动查找需要的函数，若它们存在则使用它们。若不存在，函数
   <span class="function"><a href="function.nsapi-virtual.html" class="function">nsapi_virtual()</a></span> 被禁用。
  </p>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    但是要注意，对 <span class="function"><a href="function.nsapi-virtual.html" class="function">nsapi_virtual()</a></span> 的支持是试验性质的！
   </p>
  </p></blockquote>
 </div>

</div><hr /><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="install.unix.lighttpd-14.html">Unix 平台的 Lighttpd 1.4</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="install.unix.commandline.html">CGI 和命令行设置</a></div>
 <div class="up"><a href="install.unix.html">Unix 系统下的安装</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div></body></html>
